using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Kitware.mummy.Runtime;

namespace Kitware.VTK;

/// <summary>
///    vtkRotationalExtrusionFilter
/// </summary>
/// <remarks>
///    sweep polygonal data creating "skirt" from free edges and lines, and lines from vertices
///
/// vtkRotationalExtrusionFilter is a modeling filter. It takes polygonal
/// data as input and generates polygonal data on output. The input dataset
/// is swept around an axis to create new polygonal primitives. These
/// primitives form a "skirt" or swept surface. For example, sweeping a
/// line results in a cylindrical shell, and sweeping a circle creates a
/// torus.
///
/// There are a number of control parameters for this filter. You can
/// control whether the sweep of a 2D object (i.e., polygon or triangle
/// strip) is capped with the generating geometry via the "Capping" instance
/// variable. Also, you can control the angle of rotation, whether
/// translation along the axis is performed along with the rotation, and around
/// which axis this is done.
/// (Translation is useful for creating "springs".) You also can adjust
/// the radius of the generating geometry using the "DeltaRotation" instance
/// variable.
///
/// The skirt is generated by locating certain topological features. Free
/// edges (edges of polygons or triangle strips only used by one polygon or
/// triangle strips) generate surfaces. This is true also of lines or
/// polylines. Vertices generate lines.
///
/// This filter can be used to model axisymmetric objects like cylinders,
/// bottles, and wine glasses; or translational/rotational symmetric objects
/// like springs or corkscrews.
///
/// @warning
/// If the object sweeps 360 degrees, radius does not vary, and the object
/// does not translate, capping is not performed. This is because the cap
/// is unnecessary.
///
/// @warning
/// Some polygonal objects have no free edges (e.g., sphere). When swept,
/// this will result in two separate surfaces if capping is on, or no surface
/// if capping is off.
///
/// </remarks>
/// <seealso>
///
/// vtkLinearExtrusionFilter
/// </seealso>
public class vtkRotationalExtrusionFilter : vtkPolyDataAlgorithm
{
	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	public new const string MRFullTypeName = "Kitware.VTK.vtkRotationalExtrusionFilter";

	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	public new static readonly string MRClassNameKey;

	/// <summary>
	/// Automatically generated type registration mechanics.
	/// </summary>
	static vtkRotationalExtrusionFilter()
	{
		MRClassNameKey = "class vtkRotationalExtrusionFilter";
		Methods.RegisterType(Assembly.GetExecutingAssembly(), MRClassNameKey, Type.GetType("Kitware.VTK.vtkRotationalExtrusionFilter"));
	}

	/// <summary>
	/// Automatically generated constructor - called from generated code.
	/// DO NOT call directly.
	/// </summary>
	public vtkRotationalExtrusionFilter(IntPtr rawCppThis, bool callDisposalMethod, bool strong)
		: base(rawCppThis, callDisposalMethod, strong)
	{
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkRotationalExtrusionFilter_New(ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	/// Create object with capping on, angle of 360 degrees, resolution = 12, and
	/// no translation along z-axis.
	/// vector (0,0,1), and point (0,0,0).
	/// </summary>
	public new static vtkRotationalExtrusionFilter New()
	{
		vtkRotationalExtrusionFilter result = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkRotationalExtrusionFilter_New(ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			result = (vtkRotationalExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var _);
		}
		return result;
	}

	/// <summary>
	/// Create object with capping on, angle of 360 degrees, resolution = 12, and
	/// no translation along z-axis.
	/// vector (0,0,1), and point (0,0,0).
	/// </summary>
	public vtkRotationalExtrusionFilter()
		: base(IntPtr.Zero, callDisposalMethod: false, strong: false)
	{
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr rawCppThis = vtkRotationalExtrusionFilter_New(ref mteStatus, ref mteIndex, ref rawRefCount);
		SetCppThis(rawCppThis, callDisposalMethod: true, (mteStatus != 0 && rawRefCount >= 2) ? true : false);
	}

	/// <summary>
	/// Automatically generated protected Dispose method - called from
	/// public Dispose or the C# destructor. DO NOT call directly.
	/// </summary>
	protected override void Dispose(bool disposing)
	{
		base.Dispose(disposing);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_CappingOff_01(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void CappingOff()
	{
		vtkRotationalExtrusionFilter_CappingOff_01(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_CappingOn_02(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void CappingOn()
	{
		vtkRotationalExtrusionFilter_CappingOn_02(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern double vtkRotationalExtrusionFilter_GetAngle_03(HandleRef pThis);

	/// <summary>
	/// Set/Get angle of rotation.
	/// </summary>
	public virtual double GetAngle()
	{
		return vtkRotationalExtrusionFilter_GetAngle_03(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkRotationalExtrusionFilter_GetCapping_04(HandleRef pThis);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual int GetCapping()
	{
		return vtkRotationalExtrusionFilter_GetCapping_04(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern double vtkRotationalExtrusionFilter_GetDeltaRadius_05(HandleRef pThis);

	/// <summary>
	/// Set/Get change in radius during sweep process.
	/// </summary>
	public virtual double GetDeltaRadius()
	{
		return vtkRotationalExtrusionFilter_GetDeltaRadius_05(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern long vtkRotationalExtrusionFilter_GetNumberOfGenerationsFromBase_06(HandleRef pThis, string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public override long GetNumberOfGenerationsFromBase(string type)
	{
		return vtkRotationalExtrusionFilter_GetNumberOfGenerationsFromBase_06(GetCppThis(), type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern long vtkRotationalExtrusionFilter_GetNumberOfGenerationsFromBaseType_07(string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static long GetNumberOfGenerationsFromBaseType(string type)
	{
		return vtkRotationalExtrusionFilter_GetNumberOfGenerationsFromBaseType_07(type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkRotationalExtrusionFilter_GetResolution_08(HandleRef pThis);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual int GetResolution()
	{
		return vtkRotationalExtrusionFilter_GetResolution_08(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkRotationalExtrusionFilter_GetResolutionMaxValue_09(HandleRef pThis);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual int GetResolutionMaxValue()
	{
		return vtkRotationalExtrusionFilter_GetResolutionMaxValue_09(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkRotationalExtrusionFilter_GetResolutionMinValue_10(HandleRef pThis);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual int GetResolutionMinValue()
	{
		return vtkRotationalExtrusionFilter_GetResolutionMinValue_10(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkRotationalExtrusionFilter_GetRotationAxis_11(HandleRef pThis);

	/// <summary>
	/// Set/Get the axis around which the rotation is done.
	/// </summary>
	public virtual double[] GetRotationAxis()
	{
		IntPtr intPtr = vtkRotationalExtrusionFilter_GetRotationAxis_11(GetCppThis());
		double[] array = null;
		if (IntPtr.Zero != intPtr)
		{
			array = new double[3];
			Marshal.Copy(intPtr, array, 0, array.Length);
		}
		return array;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_GetRotationAxis_12(HandleRef pThis, ref double _arg1, ref double _arg2, ref double _arg3);

	/// <summary>
	/// Set/Get the axis around which the rotation is done.
	/// </summary>
	public virtual void GetRotationAxis(ref double _arg1, ref double _arg2, ref double _arg3)
	{
		vtkRotationalExtrusionFilter_GetRotationAxis_12(GetCppThis(), ref _arg1, ref _arg2, ref _arg3);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_GetRotationAxis_13(HandleRef pThis, IntPtr _arg);

	/// <summary>
	/// Set/Get the axis around which the rotation is done.
	/// </summary>
	public virtual void GetRotationAxis(IntPtr _arg)
	{
		vtkRotationalExtrusionFilter_GetRotationAxis_13(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern double vtkRotationalExtrusionFilter_GetTranslation_14(HandleRef pThis);

	/// <summary>
	/// Set/Get total amount of translation along the rotation axis.
	/// </summary>
	public virtual double GetTranslation()
	{
		return vtkRotationalExtrusionFilter_GetTranslation_14(GetCppThis());
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkRotationalExtrusionFilter_IsA_15(HandleRef pThis, string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public override int IsA(string type)
	{
		return vtkRotationalExtrusionFilter_IsA_15(GetCppThis(), type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern int vtkRotationalExtrusionFilter_IsTypeOf_16(string type);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static int IsTypeOf(string type)
	{
		return vtkRotationalExtrusionFilter_IsTypeOf_16(type);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkRotationalExtrusionFilter_NewInstance_18(HandleRef pThis, ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new vtkRotationalExtrusionFilter NewInstance()
	{
		vtkRotationalExtrusionFilter result = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkRotationalExtrusionFilter_NewInstance_18(GetCppThis(), ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			result = (vtkRotationalExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var _);
		}
		return result;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern IntPtr vtkRotationalExtrusionFilter_SafeDownCast_19(HandleRef o, ref uint mteStatus, ref uint mteIndex, ref uint rawRefCount);

	/// <summary>
	///             Undocumented Block
	/// </summary>
	public new static vtkRotationalExtrusionFilter SafeDownCast(vtkObjectBase o)
	{
		vtkRotationalExtrusionFilter vtkRotationalExtrusionFilter2 = null;
		uint mteStatus = 0u;
		uint mteIndex = uint.MaxValue;
		uint rawRefCount = 0u;
		IntPtr intPtr = vtkRotationalExtrusionFilter_SafeDownCast_19(o?.GetCppThis() ?? default(HandleRef), ref mteStatus, ref mteIndex, ref rawRefCount);
		if (IntPtr.Zero != intPtr)
		{
			vtkRotationalExtrusionFilter2 = (vtkRotationalExtrusionFilter)Methods.CreateWrappedObject(mteStatus, mteIndex, rawRefCount, intPtr, callDisposalMethod: true, out var found);
			if (found)
			{
				vtkRotationalExtrusionFilter2.Register(null);
			}
		}
		return vtkRotationalExtrusionFilter2;
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_SetAngle_20(HandleRef pThis, double _arg);

	/// <summary>
	/// Set/Get angle of rotation.
	/// </summary>
	public virtual void SetAngle(double _arg)
	{
		vtkRotationalExtrusionFilter_SetAngle_20(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_SetCapping_21(HandleRef pThis, int _arg);

	/// <summary>
	/// Turn on/off the capping of the skirt.
	/// </summary>
	public virtual void SetCapping(int _arg)
	{
		vtkRotationalExtrusionFilter_SetCapping_21(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_SetDeltaRadius_22(HandleRef pThis, double _arg);

	/// <summary>
	/// Set/Get change in radius during sweep process.
	/// </summary>
	public virtual void SetDeltaRadius(double _arg)
	{
		vtkRotationalExtrusionFilter_SetDeltaRadius_22(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_SetResolution_23(HandleRef pThis, int _arg);

	/// <summary>
	/// Set/Get resolution of sweep operation. Resolution controls the number
	/// of intermediate node points.
	/// </summary>
	public virtual void SetResolution(int _arg)
	{
		vtkRotationalExtrusionFilter_SetResolution_23(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_SetRotationAxis_24(HandleRef pThis, double _arg1, double _arg2, double _arg3);

	/// <summary>
	/// Set/Get the axis around which the rotation is done.
	/// </summary>
	public virtual void SetRotationAxis(double _arg1, double _arg2, double _arg3)
	{
		vtkRotationalExtrusionFilter_SetRotationAxis_24(GetCppThis(), _arg1, _arg2, _arg3);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_SetRotationAxis_25(HandleRef pThis, IntPtr _arg);

	/// <summary>
	/// Set/Get the axis around which the rotation is done.
	/// </summary>
	public virtual void SetRotationAxis(IntPtr _arg)
	{
		vtkRotationalExtrusionFilter_SetRotationAxis_25(GetCppThis(), _arg);
	}

	[DllImport("Kitware.VTK.FiltersModeling.Unmanaged.dll", CallingConvention = CallingConvention.Cdecl)]
	internal static extern void vtkRotationalExtrusionFilter_SetTranslation_26(HandleRef pThis, double _arg);

	/// <summary>
	/// Set/Get total amount of translation along the rotation axis.
	/// </summary>
	public virtual void SetTranslation(double _arg)
	{
		vtkRotationalExtrusionFilter_SetTranslation_26(GetCppThis(), _arg);
	}
}
